iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

不要太認真學 Python! 之 我又重新報名了系列 第 27

不要太認真學 Python! - Day 30

  • 分享至 

  • xImage
  •  

[前情提要]

好的,本宮為了這個 Pygame「小淘氣」遊戲,真的是輾轉難眠啊~

https://ithelp.ithome.com.tw/upload/images/20191001/20120423ZmsaAAZJzd.jpg

我真的很緊張,如果生不出背景或畫面,我真的會想棄坑。
可是在最後這幾天棄坑,玩其他的感覺又很來不及。

所以,我真的逼自己豁出去,先告訴自己最壞的打算就是爛尾。

然後,就冷靜下來了,那就專心研究該怎麼把背景弄好,就算爛尾也沒關係了。


好的,一樣先上吧!!!程式碼!!!

import pygame
import random

pygame.init()

black = (0, 0, 0)
green = (91,231,196)
  
gameNaughtybox = pygame.display.set_mode((600,600))
pygame.Surface((600,600))
dest = (0,0)

pygame.display.set_caption ("Naughty Box")

walkRight = [pygame.image.load('Angel-1-3.png'), pygame.image.load('Angel-1-1.png')]
walkLeft = [pygame.image.load('Angel-1-7.png'), pygame.image.load('Angel-1-6.png')]
bg = pygame.image.load('pipo-battlebg007b.png')
gameNaughtybox.blit(bg,(0,0))
pygame.display.flip()

class Player(pygame.sprite.Sprite):
    character=[pygame.image.load ("Angel-1-4.png")]
    
BGM = [pygame.mixer.music.load("NES - CIRCUS CHARLIE-B(stage1_stage5).mp3")]
pygame.mixer.music.play()

clock = pygame.time.Clock()
    
x = 50
y = 50
width =65
height = 65
vel = 8
isJump = False
jumpCount = 15
left = False
right =False
walkCount = 0

def redrwnewWindow():
    global walkCount
    if walkCount + 1 >= 29:
        walkCount = 0
    if left:
        gameNaughtybox.blit (walkLeft)[walkCount//3. (x,y)]
        walkCount +=1
    elif right:
        gameNaughtybox.blit (walkRight[walkCount//3], (x,y))
        walkCount +=1
    else:
        gameNaughtybox.blit(character)
                        
    pygame.display.update()

run = True
while run:
    clock.tick(29)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 

    keys = pygame.key.get_pressed()
    
    if keys [pygame.K_LEFT] and x > vel:
        x -= vel
        left = True
        right = False
    elif keys [pygame.K_RIGHT] and x < 600 - width - vel:
        x += vel
        left = False
        right = True
    elif keys [pygame.K_UP] and y > vel:
        y -= vel
        right = True
        left = True
    elif keys [pygame.K_DOWN] and y < 600 - height - vel:
        y += vel
        right = False
        left = False
    else:
        right = False
        left = False
        walkCount = 0
        
pygame.quit()

先說說跟我一樣的新手,如果跟我一樣遇到程式無法如預期一樣執行的時候,該怎麼辦?

我的方法不一定對,也不一定很好用,但是我真的這應該是新手最能減低緊張的方式。

啊,還有一個前提,就是程式碼少的時候,比較好用。程式碼一多,可能就很花時間了。

特別提醒:在測試之前,如果完全沒把握,最好先儲存最原始的程式碼,如果測試到兩眼昏花、精神錯亂,才可以回到最初的起點~)唱 額不是,是才可以從最初的思路重新開始。

Yes

上個歌,程式新手也是有感性的時候啊 XDD

1. 關鍵字測試:一次一個關鍵字,一個關鍵字放在不同地方。

首先,先把所有相關的關鍵字先在心中或是其他便條列出來。

然後,一次拿其中一個關鍵字出來測試,把它放在你覺得可能放的位置,把這些位置都放過一遍以後,就換第二個關鍵字。

每個關鍵字,擺放的位置不盡相同,所以要一個一個試。

如果全部都測試過了,才可以稍微排列組合變成兩組或多組測試。

2. Oreo 測試法:分段測試。

如果第一個方法行不通,就換第二種方法。
我自己取名為 Oreo 測試法,就是分成前中後段測試。
程式碼肯定有前中後三段,前段是基本設定,中段是定義,後段是執行。

我取名Oreo是有原因的,因為前中後段位置固定,前段不能跑到後面去。

就像 import 不會跑到最後面、 quit 不會跑到最前面去一樣,中段或後段可能會有很多定義和執行。

這時候就是依照
先測試中段:「前段、中段2、後段1」、「前段、中段3、後段1」...
再測試後段:「前段、中段1、後段2」、「前段、中段1、後段3」...

這樣應該就可以解決,或者說更容易找到問題的根源。


好的,來開始檢查吧!

首先,先把背景音樂拉掉...
為什麼呢?
因為每次測試一直重播,真的太吵了...)哭笑不得

BGM = [pygame.mixer.music.load("NES - CIRCUS CHARLIE-B(stage1_stage5).mp3")]
pygame.mixer.music.play()

https://ithelp.ithome.com.tw/upload/images/20191002/20120423VERtdmZOcd.jpg

然後,感謝邦友留言提點blit要怎麼用,先試用 gameNaughtybox.blit(bg,(600,600)),把它加在可能會動的地方,像是 run = True 或是 def redrwnewWindow(): 下面,測試多個地方,但是仍然不能運作。

於是,盡信邦友提點,不如假裝沒人提點!!!(我覺得這點也很重要)

如果高人指點仍無法運作,就要回去讀那些關鍵字和函式的基本定義。唯有重新閱讀定義與相關解釋,並檢視程式碼,才有可能知道到底盲點在哪裡。

認真地讀了定義以後,

Draws a source Surface onto this Surface. The draw can be positioned with the dest argument. Dest can either be pair of coordinates representing the upper left corner of the source. A Rect can also be passed as the destination and the topleft corner of the rectangle will be used as the position for the blit. The size of the destination rectangle does not effect the blit.

對的,不管是 dest 或是 blit 都是以前台顯示框的左上角(0,0)為起始點。


好的,今天是不是有點太認真了...
打不完就算了,梗圖也來不及上欸...
拜託...讓我後補 囧


因此,我突然清醒了!!!)腦袋被敲了好大一下
對吼!!! dest = (600,600) 是錯的!!!
這裡的(600,600)不是畫面大小,而是指起始的位置!!!
gameNaughtybox.blit(bg,(0,0)) 也是一樣道理!!!

我立刻馬上更改!!!

送出以後!!!

小淘氣的背景終於出來了!!!

好的,就讓肥宅一個人靜靜的在角落,激動的感動的痛哭流涕吧!!!!!
嗚嗚嗚嗚嗚嗚 看到那片海,眼淚真的都流下來了Q.Q

https://ithelp.ithome.com.tw/upload/images/20191002/20120423qYv6H4JoRa.jpg

肥宅我的眼淚


雖然標題是30天,但是因為我的愚蠢,導致於第一次參賽失敗...
所以重新報名了以後,我還必須多寫三天...

感謝至今留言、幫助過我的人,也感謝訂閱我的人。

我會加油的。

希望明天能讓角色成功出現!

被那片海和自己感動的亂七八糟收工!!!


不要太認真學 Python! - Day 29


上一篇
不要太認真學 Python! - Day 29
下一篇
不要太認真學 Python! - Day 31
系列文
不要太認真學 Python! 之 我又重新報名了31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言